home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / 4_0 / FLEX-TC_ / MISC < prev    next >
Text File  |  1990-01-02  |  7KB  |  207 lines

  1. Miscellaneous flex stuff.  In here you'll find an out-of-date VMS makefile
  2. for flex and notes someone sent me regarding converting flex to deal with
  3. 8 bit characters.  This stuff is provided so that ambitious folks can pick
  4. it up and turn it into something viable.  I'd appreciate being sent any
  5. updates resulting from work on this.
  6.  
  7. The makefile is from Fred Brehm (fwb@demon.siemens.com); the 8 bit chars
  8. from Earle Horton (arizona!earleh@eleazar.Dartmouth.EDU).
  9.  
  10.  
  11.  
  12. ############################ VMS MAKEFILE ##############################
  13.  
  14. # VMS make file for "flex" tool
  15.  
  16. # Redefine the following for your own environment
  17. BIN = tools$$exe
  18. LIB = tools$$library
  19. INC = tools$$include
  20. MAN = tools$$manual
  21. LINKFLAGS = ,$(LIB):cc/opt
  22.  
  23. SKELETON_FILE = "DEFAULT_SKELETON_FILE=""$(LIB):FLEX.SKEL"""
  24. F_SKELETON_FILE = "FAST_SKELETON_FILE=""$(LIB):FLEX.FASTSKEL"""
  25.  
  26. CCFLAGS = VMS
  27. FLEX_FLAGS = -is
  28.  
  29. FLEXOBJS = ccl.obj dfa.obj ecs.obj main.obj misc.obj nfa.obj parse.obj \
  30. scan.obj sym.obj tblcmp.obj yylex.obj
  31.  
  32. OBJ = ccl.obj,dfa.obj,ecs.obj,main.obj,misc.obj,nfa.obj,parse.obj,\
  33. scan.obj,sym.obj,tblcmp.obj,yylex.obj
  34.  
  35. default : flex
  36. install : inc lib bin man
  37. inc : $(INC):flexskeldef.h $(INC):fastskeldef.h $(INC):flexskelcom.h
  38. lib : $(LIB):flex.skel $(LIB):flex.fastskel
  39. bin : $(BIN):flex
  40.     flex :== $$ $(BIN):flex
  41. man : $(MAN):flex.doc
  42.  
  43. $(INC):flexskeldef.h : flexskeldef.h
  44.     copy flexskeldef.h $(INC)
  45. $(INC):fastskeldef.h : fastskeldef.h
  46.     copy fastskeldef.h $(INC)
  47. $(INC):flexskelcom.h : flexskelcom.h
  48.     copy flexskelcom.h $(INC)
  49. $(LIB):flex.skel : flex.skel
  50.     copy flex.skel $(LIB)
  51. $(LIB):flex.fastskel : flex.fastskel
  52.     copy flex.fastskel $(LIB)
  53. $(BIN):flex.exe : flex.exe
  54.     copy flex.exe $(BIN)
  55. $(MAN):flex.doc : flex.doc
  56.     copy flex.doc $(MAN)
  57.  
  58. flex : flex.exe
  59.     flex :== $$ 'f$$environment("default")'flex
  60.  
  61. flex.exe : $(FLEXOBJS)
  62.     link /exe=flex $(OBJ) $(LINKFLAGS)
  63.  
  64. parse.h : parse.c
  65.  
  66. parse.c : parse.y
  67.     yacc :== $$ sys$$sysroot:[shellexe]yacc
  68.     yacc -d parse.y
  69.     copy y_tab.c parse.c
  70.     copy y_tab.h parse.h
  71.     del y_tab.h;*,y_tab.c;*
  72.  
  73. #scan.c : scan.l
  74. #    flex $(FLEX_FLAGS) scan.l
  75. #    copy lex_yy.c scan.c
  76. #    del lex_yy.c;*
  77. scan.c : scan.dist
  78.     copy scan.dist scan.c
  79.  
  80. ccl.obj : ccl.c flexdef.h
  81.     cc /define=$(CCFLAGS) ccl.c
  82. dfa.obj : dfa.c flexdef.h
  83.     cc /define=$(CCFLAGS) dfa.c
  84. ecs.obj : ecs.c flexdef.h
  85.     cc /define=$(CCFLAGS) ecs.c
  86. main.obj : main.c flexdef.h
  87.     cc /define=($(CCFLAGS),$(SKELETON_FILE),$(F_SKELETON_FILE)) main.c
  88. misc.obj : misc.c flexdef.h
  89.     cc /define=$(CCFLAGS) misc.c
  90. nfa.obj : nfa.c flexdef.h
  91.     cc /define=$(CCFLAGS) nfa.c
  92. parse.obj : parse.c flexdef.h
  93.     cc /define=$(CCFLAGS) parse.c
  94. scan.obj : scan.c parse.h flexdef.h
  95.     cc /define=$(CCFLAGS) scan.c
  96. sym.obj : sym.c flexdef.h
  97.     cc /define=$(CCFLAGS) sym.c
  98. tblcmp.obj : tblcmp.c flexdef.h
  99.     cc /define=$(CCFLAGS) tblcmp.c
  100. yylex.obj : yylex.c parse.h flexdef.h
  101.     cc /define=$(CCFLAGS) yylex.c
  102.  
  103. clean :
  104.     del flex.exe;*
  105.     del scan.c;*
  106.     del parse.c;*
  107.     del parse.h;*
  108.     del lex_yy.c;*
  109.     del *.obj;*
  110.     del flex*.tmp;*
  111.     del *.diff;*
  112.     del y_tab.*;*
  113.     del makefile.;*
  114.     purge/log
  115.     copy makefile.vms makefile.
  116.  
  117. makefile : makefile.vms
  118.     copy makefile.vms makefile.
  119.  
  120. test : flex
  121.     define tools$$lib 'f$$environment("default")'
  122.     flex $(FLEX_FLAGS) scan.l
  123.     define tools$$lib tools$$sys:[lib]
  124.     diff/out=flex.diff scan.dist lex_yy.c
  125.     type/page flex.diff
  126.  
  127.  
  128.  
  129. ######################### Stuff for 8 Bit chars ########################
  130.  
  131.  
  132. Earle Horton has made a version of flex run on the MacIntosh under MPW.  Not
  133. being content to scan regular ascii, he deals with all 8 bits.  I also have
  134. wanted to write VMS filters that recognize <CSI>, etc. so I contacted him
  135. about his work.  He seems to be unable to reach you directly--the rest of
  136. this is his note...
  137. ---------------------------Note from Earle------------------
  138. >From arizona!earleh@eleazar.Dartmouth.EDU Fri May 27 11:33:09 1988
  139. Received: from DARTVAX.DARTMOUTH.EDU by megaron.arizona.edu; Fri, 27 May 88 10:55:39 MST
  140. Received: from eleazar.dartmouth.edu by dartvax.dartmouth.edu (5.59/3.4ROOT)
  141.     id AA17044; Fri, 27 May 88 13:53:18 EDT
  142. Received: by eleazar.dartmouth.edu (5.59/3.2LEAF)
  143.     id AA15906; Fri, 27 May 88 13:53:04 EDT
  144. Date: Fri, 27 May 88 13:53:04 EDT
  145. From: arizona!earleh@eleazar.Dartmouth.EDU (Earle R. Horton)
  146. Message-Id: <8805271753.AA15906@eleazar.dartmouth.edu>
  147. To: eleazar!earleh, earleh@eleazar.Dartmouth.EDU, naucse!jdc
  148. Subject: Re: Flex and DEC multi-nationals, help!
  149. Status: R
  150.  
  151. John,
  152.  
  153.      I have posted the diffs to comp.sources.unix, and I think that
  154. they could be used to generate a VAX C version which scans DEC
  155. multi-nationals with little extra effort.  I tried the address which
  156. you give for Vern several times, only to have it bounce back to me for
  157. some mysterious reason known only to a mail daemon somewhere.  I would
  158. indeed appreciate it if you could forward this to him.
  159.  
  160.      I have found that the full internal representation of all
  161. characters as shorts is not necessary.  Rather, it is only necessary to
  162.  
  163.      a)  Prevent conversion of valid characters to negative ints.  I
  164.          do this with a mask, defined for the Mac and UNIX as 
  165.          "#define BYTEMASK 0xFF".  Any time a char is converted to an
  166.          int, AND it with the mask.  Then you don't have to declare
  167.          chars as unsigned chars, which is tiresome.
  168.  
  169.      b)  The routine mkeccl() uses negation of characters for a flag
  170.          to determine whether they have been processed.  I used a
  171.          debugger to estimate how many times this routine is actually
  172.          called when Flex scans scan.l.  Based on what this looked
  173.          like to me, I decided that it would be appropriate to have
  174.          only the routine mkeccl() use an array of shorts for its
  175.          internal processing.  When mkeccl() is called, it gets a
  176.          pointer to an array of shorts using alloca(), and then reads
  177.          the characters which it is to process into this array using
  178.          the method in (a).  When mkeccl() is done, the shorts are put
  179.          back into chars, and things proceed.  The internal processing
  180.          done by mkeccl() is the same.
  181.  
  182.      Flex compiled with these changes correctly scans all characters
  183. in the Macintosh character set, to the best of my ability to test it.
  184. In addition, it correctly scans chars with values > 127 on a UNIX VAX!
  185. Contrary to "common knowledge", text files which exist on a UNIX
  186. machine may have valid characters in the range [\0177-\0377].  An
  187. example is if I want to write a program to run on a UNIX machine which
  188. converts German characters to ASCII.  The ess-tset (I believe that is
  189. the name) can be converted to "ss" with little loss of sense in most cases.
  190.          
  191.      The only question I have about my procedure is that it looks
  192. expensive to convert the ccltbl array to shorts and back every time
  193. mkeccl() is called.  However, the routine is not called an inordinately
  194. large number of times, and this conversion is probably not more
  195. expensive than a couple of calls to strcpy(), for instance.  To
  196. determine whether this is the most efficient method, one would have to
  197. go through the effort to convert Flex to use shorts for all internal
  198. representation, then profile the two methods.  Not my idea of a good
  199. time.
  200.  
  201.      Flex is a real nice program.  I couldn't find anything else wrong
  202. with it.
  203.  
  204. Earle Horton
  205.  
  206.  
  207.